package com.tree.backend.service;

import com.tree.backend.entity.dto.user.UserAddDTO;
import com.tree.backend.entity.dto.user.UserQueryDTO;
import com.tree.backend.entity.dto.user.UserUpdateDTO;
import com.tree.backend.entity.pojo.User;
import com.tree.backend.entity.vo.PageVO;
import com.tree.backend.entity.vo.auth.LoginResponseVO;
import com.tree.backend.entity.vo.auth.UserInfoVO;
import com.tree.backend.entity.vo.user.RoleTypeVO;
import com.tree.backend.entity.vo.user.UserVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 系统用户表 服务类
 * </p>
 */
public interface IUserService extends IService<User> {
    
    /**
     * 用户登录
     * @param username 用户名
     * @param password 密码
     * @return 登录结果，包含token等信息
     */
    LoginResponseVO login(String username, String password);
    
    /**
     * 用户登出
     * @param username 用户名
     */
    void logout(String username);
    
    /**
     * 获取用户信息
     * @param username 用户名
     * @return 用户详细信息
     */
    UserInfoVO getUserInfo(String username);

    /**
     * 获取用户列表
     * @param queryDTO 查询参数
     * @return 用户分页列表
     */
    PageVO<UserVO> getUsers(UserQueryDTO queryDTO);

    /**
     * 根据ID获取用户详情
     * @param id 用户ID
     * @return 用户详情
     */
    UserVO getUserById(Integer id);

    /**
     * 新增用户
     * @param userAddDTO 用户信息
     */
    void addUser(UserAddDTO userAddDTO);

    /**
     * 更新用户
     * @param id 用户ID
     * @param userUpdateDTO 更新信息
     */
    void updateUser(Integer id, UserUpdateDTO userUpdateDTO);

    /**
     * 删除用户
     * @param id 用户ID
     */
    void deleteUser(Integer id);

    /**
     * 更新用户状态
     * @param id 用户ID
     * @param status 状态值
     */
    void updateUserStatus(Integer id, Integer status);

    /**
     * 获取角色类型列表
     * @return 角色类型列表
     */
    List<RoleTypeVO> getRoleTypes();

    /**
     * 搜索用户
     * @param queryDTO 搜索参数
     * @return 搜索结果
     */
    PageVO<UserVO> searchUsers(UserQueryDTO queryDTO);
    
    /**
     * 获取所有用户列表（不分页）
     * @return 用户列表
     */
    List<UserVO> getAllUsers();

    String getUserByUserName();

}
